// vues 的权限模块
import { constantRoutes, asyncRouter } from '@/router'
// console.log(asyncRouter)
// vuex中的permission模块用来存当前的 静态路由 + 当前用户的 权限路由
const state = {
  routes: constantRoutes // 所有人默认拥有静态路由
}
const mutations = {
  // newRoutes 可以认为是 用户登录 通过权限所得到的动态路由部分
  setRoutes(state, newRoutes) {
    // state.routes = [...state.routes, ...newRoutes] //业务不对 ,用户1 登录 获取了动态路由 ,用户2 登录 会在用户1的基础动态路由上添加新的路由
    // 每次更新应该在静态路由上添加
    state.routes = [...constantRoutes, ...newRoutes]
  }
}
const actions = {
  // 负责筛选路由的action action的功能是 通过将menus的数据和动态路由的数据进行匹配,得到筛选之后的路由
  // asyncRoutes 是所有的动态路由 我们要从menus中找标识 然后在asyncRoutes中找和这个标识一样的路由
  // ["settings", "social_securitys", "permissions", "approvals", "departments", "salarys", "employees", "user12345", "attendances"]
  async filterRoutes(context, menus) {
    const routes = []
    menus.forEach(item => {
      // item是标识
      if (asyncRouter.some(route => route.name === item)) {
        // 这个认为找到了标识一样的路由
        routes.push(...asyncRouter.filter(route => route.name === item))
      }
    })
    // console.log(routes)
    // 执行到这的时候 routes就已经是 和menus标识关联完成的路由了 routes相当于完成筛选之后的动态路由
    context.commit('setRoutes', routes)
    return routes
    // 这里的return 上面是将数据写入vuex return的作用是将数据返回 供 去做addRoutes使用
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
